1 Introduction et Objectifs de l’Analyse

Ce rapport présente l’analyse statistique des données de répétabilité (df.csv) d’un robot FANUC.

L’objectif est de qualifier la performance du robot et la fiabilité de notre système de mesure.

Notre démarche se déroule en trois temps :

  1. Valider le Système de Mesure (ANOVA) : Avant de juger le robot, nous devons prouver que nos 3 comparateurs (C1, C2, C3) sont interchangeables et ne présentent pas de biais systématique.

  1. Valider les Hypothèses (Normalité) : Nous vérifierons si la distribution des erreurs suit une Loi Normale, ce qui est un prérequis pour de nombreux calculs de capabilité.

  2. Qualifier le Robot (ISO 9283) : Une fois le système de mesure et les hypothèses validés, nous calculerons la répétabilité de position \(RP_L\) pour conclure sur la conformité du robot.

2 Chargement et Préparation des Données

Les données sont lues depuis le fichier df.csv

# Charger les données (en spécifiant le délimiteur point-virgule)
donnees_brutes <- read_csv("df.csv")

# Sélectionner uniquement les colonnes de mesure C1, C2, C3
donnees <- donnees_brutes %>%
  select(C1, C2, C3)

# Afficher un aperçu des données
kable(head(donnees), caption = "Aperçu des 30 mesures (en mm)")
Aperçu des 30 mesures (en mm)
C1 C2 C3
-0.0026992 0.0004699 -0.0033961
-0.0090493 -0.0031616 -0.0006742
0.0046711 0.0057598 -0.0040098
0.0077637 -0.0065867 -0.0018683
0.0067946 -0.0109647 -0.0004115
0.0056585 -0.0045923 0.0013810

3 Analyse du Système de Mesure (ANOVA)

Objectif : Déterminer si les 3 comparateurs (C1, C2, C3) fournissent des mesures statistiquement identiques.

3.1 Visualisation des Distributions (Boxplots)

# Mettre les données au format long
donnees_long <- donnees %>%
  pivot_longer(cols = c(C1, C2, C3), names_to = "Comparateur", values_to = "Mesure")

# Créer le Boxplot
ggplot(donnees_long, aes(x = Comparateur, y = Mesure, fill = Comparateur)) +
  geom_boxplot() +
  labs(title = "Distribution des Mesures par Comparateur",
       y = "Écart mesuré (mm)",
       x = "Comparateur") +
  theme_minimal()

Analyse visuelle : Le Boxplot montre que les médianes (le trait gras) des trois comparateurs ne sont pas parfaitement alignées. Les comparateurs X et Z sont relativement bien centrés en zéro, tandis que Y n’est pas bien centré. L’ANOVA va nous dire si cet écart est statistiquement significatif ou simplement dû au hasard.

3.2 Test Statistique ANOVA

Nous testons l’hypothèse nulle (\(H_0\)) : “Les moyennes des 3 comparateurs sont égales”

# Réaliser l'ANOVA
modele_anova <- aov(Mesure ~ Comparateur, data = donnees_long)

# Afficher le résumé de l'ANOVA
summary(modele_anova)
##             Df   Sum Sq   Mean Sq F value Pr(>F)  
## Comparateur  2 0.000242 0.0001212   2.999  0.055 .
## Residuals   87 0.003515 0.0000404                 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Interprétation de l’ANOVA :La ligne Comparateur nous donne le résultat du test.

La \(p_{value}\) (colonne Pr(>F)) est de 0.055.

Puisque la \(p_{value}\) > 0.055, la \(p_{value}\) n’est pas suffisamment faible pour que nous rejetions l’hypothèse nulle.

Conclusion de l’ANOVA : Il n’y a pas de différence statistiquement significative entre les moyennes des trois comparateurs.

3.3 Test de l’homogénéité des variances (Test de Levenne)

# Nous utilisons les données au format long (donnees_long)
# On teste si la 'Mesure' a la même variance en fonction du 'Comparateur'
# Par défaut (center=median), cela exécute le test de Brown-Forsythe, 
# qui est la version robuste (recommandée) du test de Levene.
test_levene <- leveneTest(Mesure ~ Comparateur, data = donnees_long)

# 4. Afficher les résultats (la p-value se lit dans la colonne Pr(>F))
print(test_levene)
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value    Pr(>F)    
## group  2   9.858 0.0001384 ***
##       87                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

4 Vérification des Hypothèses (Normalité)

Objectif : Valider l’hypothèse de normalité des données, qui sous-tend l’utilisation de l’ANOVA et des calculs statistiques de capabilité.

# Test de Shapiro-Wilk sur les 3 axes
shapiro_C1 <- shapiro.test(donnees$C1)
shapiro_C2 <- shapiro.test(donnees$C2)
shapiro_C3 <- shapiro.test(donnees$C3)

# Affichage des résultats
normality_results <- data.frame(
  Jeu_de_donnees = c("C1", "C2", "C3"),
  p_value = c(shapiro_C1$p.value, shapiro_C2$p.value, shapiro_C3$p.value)
)

kable(normality_results, caption = "Résultats des Tests de Normalité (Shapiro-Wilk)", digits = 4)
Résultats des Tests de Normalité (Shapiro-Wilk)
Jeu_de_donnees p_value
C1 0.7212
C2 0.0972
C3 0.1542

Interprétation de la Normalité :L’hypothèse nulle (\(H_0\)) du test de Shapiro-Wilk est “Les données suivent une loi normale”.

Pour les comparateurs C1, C2, C3, toutes les \(p_{values}\) sont > 0.05.

Conclusion : Nous considérons que les données sont normalement distribuées.

Ci-dessous une représentation graphique (Q-Q plot).

# Mettre les 3 graphiques dans une seule fenêtre
par(mfrow = c(1, 3))

# Q-Q Plot pour C1
donnees$C1 <- as.numeric(donnees$C1)
qqnorm(donnees$C1, main = "Q-Q Plot C1")
qqline(donnees$C1, col = "red")

# Q-Q Plot pour C2
donnees$C2 <- as.numeric(donnees$C2)
qqnorm(donnees$C2, main = "Q-Q Plot C2")
qqline(donnees$C2, col = "red")

# Q-Q Plot pour C3
donnees$C3 <- as.numeric(donnees$C3)
qqnorm(donnees$C3, main = "Q-Q Plot C3")
qqline(donnees$C3, col = "red")

# Rétablir la fenêtre graphique par défaut
par(mfrow = c(1, 1))

Le procédé est stable et prévisible.

5 Calcul de la Répétabilité Robot (ISO 9283)

Objectif : Maintenant que le système de mesure et les hypothèses sont validés, nous pouvons qualifier la performance 3D du robot.

5.1 Visualisation 3D du Nuage de Dispersion

# Créer le graphique 3D interactif
plot_ly(donnees, x = ~C1, y = ~C2, z = ~C3, type = 'scatter3d', mode = 'markers',
        marker = list(size = 5, color = 'blue', opacity = 0.8)) %>%
  layout(title = "Dispersion 3D des 30 Points de Mesure",
         scene = list(xaxis = list(title = 'C1 (mm)'),
                      yaxis = list(title = 'C2 (mm)'),
                      zaxis = list(title = 'C3 (mm)')))

Analyse visuelle : Le nuage de points semble bien réparti, sans point aberrant.

5.2 Calcul de la Répétabilité \(RP_L\)

# 1. Calculer le barycentre (position moyenne du nuage de points)
barycentre <- c(mean(donnees$C1), mean(donnees$C2), mean(donnees$C3))

# 2. Calculer les distances euclidiennes (l_j) de chaque point au barycentre
distances_l <- sqrt((donnees$C1 - barycentre[1])^2 + (donnees$C2 - barycentre[2])^2 + (donnees$C3 - barycentre[3])^2)

# 3. Calculer la moyenne de ces distances (l_bar)
l_bar <- mean(distances_l)

# 4. Calculer l'écart-type de ces distances (S_L)
S_L <- sd(distances_l)

# 5. Appliquer la formule de la norme ISO 9283
RP_L <- l_bar + 3 * S_L

# Afficher les résultats
results <- data.frame(
  Indicateur = c("Rayon moyen de dispersion (l_bar)", "Ecart-type des rayons (S_L)", "Répétabilité ISO 9283 (RP_L)"),
  Valeur_mm = c(l_bar, S_L, RP_L)
)

kable(results, caption = "Résultats du Calcul de Répétabilité (ISO 9283)", digits = 6)
Résultats du Calcul de Répétabilité (ISO 9283)
Indicateur Valeur_mm
Rayon moyen de dispersion (l_bar) 0.009400
Ecart-type des rayons (S_L) 0.005458
Répétabilité ISO 9283 (RP_L) 0.025773

6 Conclusion Générale

  1. Fiabilité du Système de Mesure : L’analyse ANOVA (p-value = 0.055) a démontré qu’il n’y a aucune différence statistique significative entre les trois comparateurs. Le système de mesure est validé.

  2. Stabilité du Procédé : L’analyse de normalité (toutes \(p_{values}\) > 0.05) montre que les erreurs du robot sont distribuées normalement. Le procédé est stable et prévisible.

  3. Performance du Robot : Le calcul selon la norme ISO 9283 établit la répétabilité de position du robot à : \(RP_L\) = 0.0258mm

  4. Verdict de Conformité : La spécification du constructeur est de ±0.02 mm. Notre mesure statistique \(RP_L\) (0.0258mm), qui représente l’enveloppe de dispersion 3D du robot, est supérieure à cette tolérance.

Conclusion finale : Le robot est déclaré NON CONFORME à sa spécification de répétabilité